<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    protected $_config = NULL;
    protected $_settings = NULL;

    protected function _initSpeedUpView() {
        require_once 'Zend/Loader/PluginLoader.php';
        $classFileIncCache = APPLICATION_PATH . '/cache/PluginLoader/Cache.php';
        if (file_exists($classFileIncCache))
            include_once $classFileIncCache;
        Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);
    }

    /**
     * Инициализация загрузчика модулей
     * @author Andrew Boyko
     * @package Bootstrap File
     * @return Zend_Application_Module_Autoloader
     */
    protected function _initAutoload() {
        // cоздание автозагрузчика модулей
        $module_default_autoloader = new Zend_Application_Module_Autoloader(
                        // масив настроек модуля
                        array(
                            'namespace' => 'Default',
                            'basePath' => APPLICATION_PATH . '/modules/default'
                        )
        );
        return $module_default_autoloader;
    }

    /**
     * Инициализация логов
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initLog() {
        // если окружение сайта == production
        if ($this->_application->getEnvironment() == 'production') {
            // ведем запись в файл лога
            $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/logs/lang.log');
        } else {
            // иначе, виводим информацию лога на панель Firebug
            $writer = new Zend_Log_Writer_Firebug();
        }
        // создание обьекта Zend_Log
        $log = new Zend_Log($writer);
        // записываем обьект в регистр, для дальнейшего использования
        Zend_Registry::set('Zend_Log', $log);
    }

    /**
     * Инициализация конфигурации
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initConfig() {
        // создаем конфиг из файла application.ini
        $config = new Zend_Config_Ini(
                        APPLICATION_PATH . '/configs/application.ini',
                        // задаем текущую секцию конфига
                        APPLICATION_ENV
        );
        // запись в регистр
        Zend_Registry::set('Zend_Config', $config);
        // для удобства, передача во внутренную переменную бутстрапа
        $this->_config = $config;
    }

    /**
     * Создание и Инициализация шаблонов сайта
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initLayouts() {
        // вытаскиваем фронт контроллер
        $this->bootstrap('frontController');
        // создаем шаблон при помощи добавления хелпера
        $layout = Zend_Controller_Action_HelperBroker::addHelper(
                        // в качестве опций создаем загрузчик шаблона из своей либы
                        new Anderles_Layouts_Loader()
        );
        // передаем пути кде лежит загрузчик шаблонов
        $layout = Zend_Controller_Action_HelperBroker::addPath(
                        'Anderles/Layouts/Loader',
                        'Anderles_Layouts_Loader'
        );
    }

    protected function _initPlugins() {
        $front = Zend_Controller_Front::getInstance();
        $front->setDefaultModule('default');
        $front->setControllerDirectory(array(
            'default' => APPLICATION_PATH . '/modules/default/controllers',
            'control' => APPLICATION_PATH . '/modules/control/controllers'
        ));
        $front->registerPlugin(new Default_Plugin_Acl('guest'));
    }

    /**
     * Создание и инициализация вида
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initView() {
        // вытаскиваем имя шаблона
        $this->bootstrap('layout');
        // инициализуем шаблон из ресурса по имени
        $layout = $this->getResource('layout');
        // создаем вид
        $view = $layout->getView();
        // для удобства все нужные данные вытаскиваем из конфига
        // инициализация доктайпа сайта
        $view->doctype('XHTML1_STRICT');
        // инициализация титла сайта
        $view->headTitle('Portfolio'
        // ставим разделитель для титла
        )->setSeparator(' :: ');
        // подключаем jquery UI в вид сайта
        ZendX_JQuery::enableView($view);

        if (!Zend_Auth::getInstance()->hasIdentity()) {
            $view->identity = false;
        } else {
            $view->identity = Zend_Auth::getInstance()->getIdentity();
        }
		
    }

    /**
     * Инициализация переводов и локали сайта
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initTranslate() {
        // cоздаем транслятор переводов
        $translate = new Zend_Translate(
                        // адаптер
                        'gettext',
                        // путь к переводам
                        APPLICATION_PATH . '/lang',
                        // перевод по умолчанию
                        NULL,
                        // настройка транслятора
                        array(
                            // что сканируем
                            'scan' => Zend_Translate::LOCALE_DIRECTORY,
                            // запрет вывода предупреждений
                            'disableNotices' => true
                        )
        );
        // проверям есть ли локаль в урле
        if (preg_match("/^\/([a-zA-Z]{2})($|\/)/", $_SERVER['REQUEST_URI'], $matches)) {
            $lang = $matches[1];
        } else {
            // иначе создание локали которую передает браузер
//			$locale = new Zend_Locale();
//			$lang = $locale->getLanguage();
//		    заглушка
            $lang = 'en';
        }
        // если не то ни другое тогда...
        if (!$translate->isAvailable($lang)) {
            // ставим локаль по умолчанию
            $lang = 'en';
        }
        // после проверок выше устанавлимаем локаль сайта
        $translate->setLocale($lang);
        // инициализация фронт контроллера для доступа к его ресурсу
        $this->bootstrap('FrontController');
        // доступ к ресурсу фронт контроллера
        $front = $this->getResource('FrontController');
        // перезапись базового урла сайта,
        // но уже с установленными локалями
        $front->setBaseUrl('/' . $lang . '/');

        $methodLocale = ucfirst($lang);
        Zend_Registry::set('methodLocale', $methodLocale);

        // если нет перевода выводим запись в лог файл или на панель firebug-а
        // в зависимости от установленного окружения
        $translate->setOptions(
                array(
                    'log' => Zend_Registry::get('Zend_Log'),
                    'logMessage' => "Not translated - '%message%' in locale '%locale%'",
                    'logUntranslated' => true
                )
        );
        // сохраняем в регистре
        Zend_Registry::set('Zend_Translate', $translate);
//	$layout = $this->getResource('layout');
//	$view = $layout->getView();
//	$view->translate = $translate;
        // задаем переводи для форм
        Zend_Validate_Abstract::setDefaultTranslator($translate);
        Zend_Form::setDefaultTranslator($translate);
    }

    /**
     * Инициализация навигации сайта
     * @author Andrew Boyko
     * @package Bootstrap File
     */
    protected function _initNavigation() {
        // витаскиваем шаблон
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        // витаскиваем вид из шаблона
        $view = $layout->getView();
        // создаем контейнер для навигации
        require_once APPLICATION_PATH . '/navigation/navigation.php';
        $navigation = new Zend_Navigation($nav);

        $view->navigation($navigation);
//		$config = new Zend_Config_Xml(APPLICATION_PATH . '/navigation/navigation.xml', 'nav');
//		$navigation = new Zend_Navigation($config);
        Zend_Registry::set('Zend_Navigation', $navigation);
        $view->navigation = $navigation;
        // передаем контейнер в вид
    }
	
}

